/**
 ******************************************************************************
 * @file           : bsp_iic_gpio_config.h
 * @brief          : Software I2C Configuration File (STM32F4xx)
 ******************************************************************************
 * @attention
 *
 * 软件模拟I2C配置文件
 * 使用GPIO模拟I2C协议，引脚任意配置
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_IIC_GPIO_CONFIG_H
#define __BSP_IIC_GPIO_CONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/

/* ============================================================================ */
/*                       日志系统配置（改这里的数字）                             */
/* ============================================================================ */
/* 日志后端选择：1=EasyLogger, 2=printf, 0=关闭 */
#define IIC_GPIO_USE_LOG     1

/* 根据配置自动定义日志宏 */
#if (IIC_GPIO_USE_LOG == 1)
    /* 使用EasyLogger */
    #ifndef LOG_TAG
        #define LOG_TAG    "IIC_GPIO"
    #endif
    #include "elog.h"
    
#elif (IIC_GPIO_USE_LOG == 2)
    /* 使用printf */
    #include <stdio.h>
    #define log_i(fmt, ...)     printf(fmt "\r\n", ##__VA_ARGS__)
    #define log_w(fmt, ...)     printf("[WARN] " fmt "\r\n", ##__VA_ARGS__)
    #define log_e(fmt, ...)     printf("[ERROR] " fmt "\r\n", ##__VA_ARGS__)
    #define log_d(fmt, ...)     printf("[DEBUG] " fmt "\r\n", ##__VA_ARGS__)
    
#else
    /* 关闭日志 */
    #define log_i(fmt, ...)
    #define log_w(fmt, ...)
    #define log_e(fmt, ...)
    #define log_d(fmt, ...)
#endif

/* ============================================================================ */
/*                     I2C引脚配置（改这里选择引脚）                              */
/* ============================================================================ */

/**
 * @brief I2C SCL引脚配置
 * 
 * 可选择任意GPIO引脚
 * 推荐使用：PB6/PB8/PB10等
 */
#define IIC_GPIO_SCL_PORT               GPIOB
#define IIC_GPIO_SCL_PIN                GPIO_PIN_6
#define IIC_GPIO_SCL_CLK_ENABLE()       __HAL_RCC_GPIOB_CLK_ENABLE()

/**
 * @brief I2C SDA引脚配置
 * 
 * 可选择任意GPIO引脚
 * 推荐使用：PB7/PB9/PB11等
 */
#define IIC_GPIO_SDA_PORT               GPIOB
#define IIC_GPIO_SDA_PIN                GPIO_PIN_7
#define IIC_GPIO_SDA_CLK_ENABLE()       __HAL_RCC_GPIOB_CLK_ENABLE()

/* ============================================================================ */
/*                     I2C速度配置（改这里调整速度）                              */
/* ============================================================================ */

/**
 * @brief I2C时钟延时
 * 
 * 调整此值可改变I2C速度
 * 值越大速度越慢，值越小速度越快
 * 推荐范围：1~10
 * 
 * 示例（168MHz系统时钟）：
 *   1 -> 约400kHz（快速模式）
 *   5 -> 约100kHz（标准模式）
 *   10 -> 约50kHz（低速模式）
 */
#define IIC_GPIO_DELAY_COUNT            5

/* Exported macro ------------------------------------------------------------*/

/**
 * @brief SCL引脚操作宏
 */
#define IIC_SCL_HIGH()      HAL_GPIO_WritePin(IIC_GPIO_SCL_PORT, IIC_GPIO_SCL_PIN, GPIO_PIN_SET)
#define IIC_SCL_LOW()       HAL_GPIO_WritePin(IIC_GPIO_SCL_PORT, IIC_GPIO_SCL_PIN, GPIO_PIN_RESET)

/**
 * @brief SDA引脚操作宏
 */
#define IIC_SDA_HIGH()      HAL_GPIO_WritePin(IIC_GPIO_SDA_PORT, IIC_GPIO_SDA_PIN, GPIO_PIN_SET)
#define IIC_SDA_LOW()       HAL_GPIO_WritePin(IIC_GPIO_SDA_PORT, IIC_GPIO_SDA_PIN, GPIO_PIN_RESET)
#define IIC_SDA_READ()      HAL_GPIO_ReadPin(IIC_GPIO_SDA_PORT, IIC_GPIO_SDA_PIN)

/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

#ifdef __cplusplus
}
#endif

#endif /* __BSP_IIC_GPIO_CONFIG_H */
